#1 直接用[]创建列表
lst1 = ['hello', 'world', 100, 95]
print(lst1)
# ['hello', 'world', 100, 95]

#2 可以用内置函数list()创建列表
lst2 = list('hello')
print(lst2)
# ['h', 'e', 'l', 'l', 'o']

lst3 = list(range(1, 10, 2)) # 从1开始，到10结束，步长为2，不包含10
print(lst3)
# [1, 3, 5, 7, 9]

#3 删除列表
lst4 = list('hello')
del lst4

#4 列表的遍历操作
lst5 = list(range(1, 10, 2))
# for循环遍历
for item in lst5:
    print(item, end=',')
# 1,3,5,7,9,
print()

# 根据索引进行遍历
for i in range(0, len(lst5)):
    print(i, lst5[i], sep=' --> ', end=',')
# 0 --> 1,1 --> 3,2 --> 5,3 --> 7,4 --> 9,
print()

# 使用枚举函数遍历
for index, item in enumerate(lst5, start=2): # start手动修改index的起始值
    print(index, item, sep=' --> ', end=',')
# 2 --> 1,3 --> 3,4 --> 5,5 --> 7,6 --> 9,
print()

#5 列表作为可变数据类型的相关操作
lst6 = ['hello', 'world']
print(lst6, id(lst6))
# ['hello', 'world'] 1523840529472
lst6.append('python')
print(lst6, id(lst6))
# ['hello', 'world', 'python'] 1523840529472
lst6.insert(1, 'my')
print(lst6, id(lst6))
# ['hello', 'my', 'world', 'python'] 1523840529472
lst6.clear()
print(lst6, id(lst6))
# [] 1523840529472

lst6 = ['hello', 'world', 'python']
lst6.pop(2)     # 取出第2位置元素
print(lst6, id(lst6))
# ['hello', 'world'] 1523840461952
lst6.remove('hello')
print(lst6, id(lst6))
# ['world'] 1523840461952

lst6 = ['hello', 'world', 'python']
lst6.reverse()
print(lst6, id(lst6))
# ['python', 'world', 'hello'] 1523840529472
new_lst6 = lst6.copy()
print(lst6, id(lst6))
# ['python', 'world', 'hello'] 1523840529472
print(new_lst6, id(new_lst6))
# ['python', 'world', 'hello'] 1523840461952
print('-'*50)

#6 修改列表元素
# 根据索引进行修改元素
lst7 = ['hello', 'world', 'python']
lst7[1] = '-'
print(lst7)
# ['hello', '-', 'python']

#7 列表的排序操作
# sort函数，不产生新列表，在原列表上更改
lst8 = [4, 56, 3, 78, 40, 56, 89]
print(lst8, id(lst8))
# [4, 56, 3, 78, 40, 56, 89] 1523840461760
lst8.sort()
print(lst8, id(lst8))
# [3, 4, 40, 56, 56, 78, 89] 1523840461760
lst8.sort(reverse=True)
print(lst8, id(lst8))
# [89, 78, 56, 56, 40, 4, 3] 1523840461760

lst9 = ['banana', 'apple', 'Cat', 'Orange']
lst9.sort() # 根据Unicode排序，所以先大写后小写
print(lst9, id(lst9))
# ['Cat', 'Orange', 'apple', 'banana'] 1523840458112
lst9.sort(key=str.lower) # 规则更改，全部默认为小写，再排序
print(lst9, id(lst9))
# ['apple', 'banana', 'Cat', 'Orange'] 1523840458112

# sorted函数，将产生新的列表，原列表不变
lst10 = ['banana', 'apple', 'Cat', 'Orange']
new_lst10 = sorted(lst10, key=str.lower, reverse=True)
print(lst10, id(lst10)) # 原列表不改变
# ['banana', 'apple', 'Cat', 'Orange'] 1523840453824
print(new_lst10, id(new_lst10))
# ['Orange', 'Cat', 'banana', 'apple'] 1523840460032

#8 列表生成式
# lst=[expression for item in range if condition]
lst11 = [item for item in range(1, 10)]
print(lst11)
# [1, 2, 3, 4, 5, 6, 7, 8, 9]

lst12 = [item*item for item in range(1, 10)]
print(lst12)
# [1, 4, 9, 16, 25, 36, 49, 64, 81]

# 随机生成10个100以内的数
import random
lst13 = [random.randint(1,100) for i in range(10)]
print(lst13)
# [43, 36, 60, 96, 91, 33, 2, 87, 70, 68]

# 在特定条件下，生成列表
lst14 = [i for i in range(1, 10) if i % 2 == 0]
print(lst14)
# [2, 4, 6, 8]

#9 二维列表的遍历与生成式
lst111 = [
    ['姓名', '学号', '成绩'],
    ['张三', 'A1', 98],
    ['李四', 'B1', 79]
]
print(lst111)
# [['姓名', '学号', '成绩'], ['张三', 'A1', 98], ['李四', 'B1', 79]]

# 遍历二维列表
for row111 in lst111:
    for item111 in row111:
        print(item111, end='\t')
    print() # 换行
# 姓名	学号	成绩
# 张三	A1	98
# 李四	B1	79

# 列表生成式，生成一个4行5列的二维列表
lst112 = [[j + 2 * i for j in range(5)] for i in range(4)]
print(lst112)
# [[0, 1, 2, 3, 4], [2, 3, 4, 5, 6], [4, 5, 6, 7, 8], [6, 7, 8, 9, 10]]

#10 列表属于序列，所以可以用max，len等操作
